/* USER CODE BEGIN Header */
/**
 ******************************************************************************
 * @file    gpio.c
 * @brief   This file provides code for the configuration
 *          of all used GPIO pins.
 ******************************************************************************
 * @attention
 *
 * Copyright (c) 2025 STMicroelectronics.
 * All rights reserved.
 *
 * This software is licensed under terms that can be found in the LICENSE file
 * in the root directory of this software component.
 * If no LICENSE file comes with this software, it is provided AS-IS.
 *
 ******************************************************************************
 */
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "gpio.h"
#include "global.h"

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/*----------------------------------------------------------------------------*/
/* Configure GPIO                                                             */
/*----------------------------------------------------------------------------*/
/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/** Configure pins as
 * Analog
 * Input
 * Output
 * EVENT_OUT
 * EXTI
 */
void MX_GPIO_Init(void) {
#ifdef test
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOE_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOC_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOE, Q09_Pin | Q07_Pin | Q06_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOD,
                    Q05_Pin | Q04_Pin | Q03_Pin | Q02_Pin | Q01_Pin | Q00_Pin,
                    GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(Q08_GPIO_Port, Q08_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin : I11_Pin */
  GPIO_InitStruct.Pin = I11_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(I11_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pins : I12_Pin I04_Pin I03_Pin I02_Pin
                           I01_Pin I00_Pin */
  GPIO_InitStruct.Pin =
      I12_Pin | I04_Pin | I03_Pin | I02_Pin | I01_Pin | I00_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /*Configure GPIO pins : Q09_Pin Q07_Pin Q06_Pin */
  GPIO_InitStruct.Pin = Q09_Pin | Q07_Pin | Q06_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

  /*Configure GPIO pins : I13_Pin I08_Pin I09_Pin I10_Pin */
  GPIO_InitStruct.Pin = I13_Pin | I08_Pin | I09_Pin | I10_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  /*Configure GPIO pins : Q05_Pin Q04_Pin Q03_Pin Q02_Pin
                           Q00_Pin */
  GPIO_InitStruct.Pin = Q05_Pin | Q04_Pin | Q03_Pin | Q02_Pin | Q00_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

  /*Configure GPIO pin : Q01_Pin */
  GPIO_InitStruct.Pin = Q01_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  HAL_GPIO_Init(Q01_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pin : Q08_Pin */
  GPIO_InitStruct.Pin = Q08_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  HAL_GPIO_Init(Q08_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pins : I07_Pin I06_Pin I05_Pin */
  GPIO_InitStruct.Pin = I07_Pin | I06_Pin | I05_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
#else
  GPIO_InitTypeDef gpio_init_struct;
  /* 时钟初始化 */
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOE_CLK_ENABLE();

  /*晶体管默认输出引脚初始化低电平 */
  HAL_GPIO_WritePin(GPIOC, Q00_Pin | Q01_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(GPIOD, Q02_Pin | Q03_Pin | Q04_Pin | Q05_Pin,
                    GPIO_PIN_RESET);
  HAL_GPIO_WritePin(GPIOE, Q06_Pin | Q07_Pin | Q08_Pin | Q09_Pin,
                    GPIO_PIN_RESET);

  /*灯输出引脚初始化低电平 */
  HAL_GPIO_WritePin(GPIOC, LED_LINK_GPIO_PIN | LED_CAN_GPIO_PIN, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOE, LED_ERR_GPIO_PIN | LED_RUN_GPIO_PIN, GPIO_PIN_SET);

  /* 输入GPIOA初始化 */
  gpio_init_struct.Pin =
      I00_Pin | I01_Pin | I02_Pin | I03_Pin | I04_Pin | I12_Pin; /* 输入引脚 */
  gpio_init_struct.Mode = GPIO_MODE_INPUT;            /* 设置为输入 */
  gpio_init_struct.Pull = GPIO_PULLUP;                /* 上拉 */
  gpio_init_struct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; /* 高速模式 */
  HAL_GPIO_Init(GPIOA, &gpio_init_struct);            /* 初始化GPIOA引脚 */

  /* 输入GPIOB初始化 */
  gpio_init_struct.Pin = I08_Pin | I09_Pin | I10_Pin | I13_Pin; /* 输入引脚 */
  gpio_init_struct.Mode = GPIO_MODE_INPUT;                      /* 设置为输入 */
  gpio_init_struct.Pull = GPIO_PULLUP;                          /* 上拉 */
  gpio_init_struct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;           /* 高速模式 */
  HAL_GPIO_Init(GPIOB, &gpio_init_struct); /* 初始化GPIOB引脚 */

  /* 输入GPIOC初始化 */
  gpio_init_struct.Pin = I05_Pin | I06_Pin | I07_Pin; /* 输入引脚 */
  gpio_init_struct.Mode = GPIO_MODE_INPUT;            /* 设置为输入 */
  gpio_init_struct.Pull = GPIO_PULLUP;                /* 上拉 */
  gpio_init_struct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; /* 高速模式 */
  HAL_GPIO_Init(GPIOC, &gpio_init_struct);            /* 初始化GPIOC引脚 */

  /* 输入GPIOE初始化 */
  gpio_init_struct.Pin = I11_Pin;                     /* I00-02引脚 */
  gpio_init_struct.Mode = GPIO_MODE_INPUT;            /* 设置为输入 */
  gpio_init_struct.Pull = GPIO_PULLUP;                /* 上拉 */
  gpio_init_struct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; /* 高速模式 */
  HAL_GPIO_Init(GPIOE, &gpio_init_struct);            /* 初始化GPIOE引脚 */

  /* 输出GPIOC初始化 */
  gpio_init_struct.Pin = Q08_Pin;                /* 输出引脚 */
  gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;   /* 推挽输出 */
  gpio_init_struct.Pull = GPIO_PULLDOWN;         /* 下拉 */
  gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */
  HAL_GPIO_Init(GPIOC, &gpio_init_struct);       /* 初始化GPIOC引脚 */

  gpio_init_struct.Pin = LED_CAN_GPIO_PIN | LED_LINK_GPIO_PIN; /*CAN_LED引脚 */
  gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;                 /* 推挽输出 */
  gpio_init_struct.Pull = GPIO_PULLUP;                         /* 上拉 */
  gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;               /* 高速 */
  HAL_GPIO_Init(GPIOC, &gpio_init_struct); /* 初始化LED引脚 */

  /* 输出GPIOD初始化 */
  gpio_init_struct.Pin =
      Q00_Pin | Q01_Pin | Q02_Pin | Q03_Pin | Q04_Pin | Q05_Pin; /* 输出引脚 */
  gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;                   /* 推挽输出 */
  gpio_init_struct.Pull = GPIO_PULLDOWN;                         /* 下拉 */
  gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;                 /* 高速 */
  HAL_GPIO_Init(GPIOD, &gpio_init_struct); /* 初始化GPIOC引脚 */

  /* 输出GPIOE初始化 */
  gpio_init_struct.Pin = Q06_Pin | Q07_Pin | Q09_Pin; /*  Y06-09引脚 */
  gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;        /* 推挽输出 */
  gpio_init_struct.Pull = GPIO_PULLDOWN;              /* 下拉 */
  gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;      /* 高速 */
  HAL_GPIO_Init(GPIOE, &gpio_init_struct);            /* 初始化GPIOC引脚 */

  gpio_init_struct.Pin = LED_RUN_GPIO_PIN | LED_ERR_GPIO_PIN; /* LED_RUN引脚 */
  gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;                /* 推挽输出 */
  gpio_init_struct.Pull = GPIO_PULLUP;                        /* 上拉 */
  gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;              /* 高速 */
  HAL_GPIO_Init(GPIOE, &gpio_init_struct); /* 初始化LED引脚 */
#endif
}

/* USER CODE BEGIN 2 */

/* USER CODE END 2 */
